[レポート] AWS CDK Construct Libraryにコントリビューションする方法 OSS #reinvent
AWS CDKはクラウドアプリケーションをプログラミング言語で記載し, デプロイするOSSの開発フレームワークです.
AWS CDKの開発はオープンで, フレームワークは柔軟に扱えるためコントリビューティングを心待ちにしています.
このセッションではデザインパターンとAWS Construct Libraryの考慮点について話します.
- タイトル: Contributing To The AWS Construct Library
- スピーカー: Elic Hujibers 様, Lee Packham 様
- セッションID: OPN205
About the AWS CDK
- PythonやJavaScriptなどのプログラミング言語でインフラを記載できる
- プログラミング言語で書かれたコードのため, メンテナンスがしやすい
- エディタの自動補完が効くので書きやすい
- セッションを受講した人の多くがすでにCDKを利用している
CDK and open source
- 隠している秘密などは何もないオープンである
- 誰でもコントリビューションできる
- GitHub上に作成されたPull Requestを元に変更を加えていく
- CDKについて
- 19ヶ月前に公開
- 1000を超えるIssue
- 200を超えるコントリビュータ
- コアメンテナは6人で構成
- コントリビュータの中でも非常に貢献している方のうち, 1人が聴講者としてこのセッションにいました
How it Works
- AWS CDKの動作がわかると, 開発もコントリビューションもしやすくなる
- AWS CDKがCloudFormationテンプレートを作成して, それをもとにCloudFormationスタックを作成
- CloudFormationのロールバックのような便利な機能がそのまま使える
- CloudFormationの記述量が多いなど, 大変な部分はCDKがうまく解消してくれる
AWS CDK Constructor Library
- 大きく分けると2種類ある
- AWS CloudFormation Resources
- CloudFormation Template Languageeの仕様を元に作成されるConcstruct Library
- プレフィックスに
Cfn
が付いた上で提供される - L1 Libraryと総称される
- AWS Construct Library
- L1を元に作成されるConstruct Library
- L1より高級なライブラリなのでL2 Libraryとも呼ばれる
- CDKを使用するユーザが実際に記述する必要があるライブラリ
AWS CloudFormation Resources
に変換される
All Contributions are Welcome
- 機能要望
- 追加したい機能がなぜ必要か, ユースケースなどを書いて要望を出す
- バグ報告
- バグを発見した場合に報告を出す
- バグ修正
- バグを修正してPull Requestの作成
- ドキュメント修正
- タイポなどがあった場合は報告やPull Requestsで修正をする
example: DynamoDB Accelerator
- 実際にDynamoDB Accelerator用のL2 Libraryをライブコーディングしていく
- 作成した内容はこちらのPull Requestから確認可能
- OSSへのコントリビュートをするのにまず, リポジトリなどにあるCONTRIBUTINGドキュメントを確認すると流れが把握できる
- AWS CDKでも同様にドキュメントがあるので確認すると良い
- 実際に該当サービスを触って何が必要で, どのような動作をするかの確認をすると良い
- DAXはVPCに作成され, セキュリティグループや, IAM ロールが必要になる
- まずはAWSリソースが動作するかを確認する
- DAZはVPC中で動作し, SGも必要
- DAXはインメモリキャッシュで低レイテンシが必要になる
- IAM Roleをアタッチする必要がある
- DynamoDBにアクセスする必要があるため
- CloudFormationの仕様確認をすると良い
- CDKはCloudFormationテンプレートを作成するためどういった項目があるかや, 必要項目がわかる
- L2 Libraryの作成
@aws-cdk/aws-dax
のlib
配下にコードを追加していく- 今回はVPCやIAMへの操作が必要になるため, 依存関係を
package.json
に追加する - L2 Libraryの基本形は下記のようになっている
export interface XxxProps {} export class Xxx extends Construct { constoructor(scope: Construct, id: string, props: XxxProps) { super(scope, id); } }
- ビルドの実行
- CDKはモノリでかつ, ライブラリが膨大にあるため全てビルドすると大変
scripts/builddown
を実行する事で現在変更を加えているモジュールのみビルドを実行する
Commit Message
- 先頭行に何をしたかの概略を書いていく
- プレフィックス, サービス, 概略の順番で書いていく
- 今回の場合は「feat(dax) Add a Cluster L2 Constructor」のようなメッセージとなる
- 動詞は現在形単数形で記載する
- 機能追加の場合は3行目以降になぜ追加したかの理由などを書いていく
Pull Request
- 機能がある程度の粒度になった段階でPull Requuestを作成して議論ができるようにする
- 作成後にメンテナがコードの確認などをしていく
Conclusion
- AWS CDKへのコントリビュートは誰でもできる
- コントリビュートする際はCDKを利用するユーザのことを考慮すると良い
- コントリビュートは非常に楽しく非常に良い経験となる
- 誰かがコントリビュートを止めたりすることはない
- あ誰でも貢献できる
- 利用者のことを考えよう
- 貢献は楽しいらしい
- 誰かがやることを止めることはない
- 誰もが詰まらないドキュメントは大事なのでしっかり作る
- それが利用者にとって良い経験となる
さいごに
個人的に好きなOSSプロジェクトの話を直接聞けてかつ, 実際にどのようにコントリビュートするかの具体的な内容まで触れていて
非常に聞けて良かったと思っています.
今後何かがあったら私もコントリビュートしたいと思います.